package com.sim.contact.tool.utils;


/**
 * Wrapper API for sending log output.
 */
public class Log {

	public interface MsgFormater {
		public String buildMessage(String msg);
	}

	private static String sTag = "PCSYS";
	private static boolean sEnableLog = true;
	private static MsgFormater sFormater = null;

	public static void init(String tag, boolean enableLog, MsgFormater formater) {
		setTag(tag);
		setEnableLog(enableLog);
		setFormater(formater);
	}

	public static void init(String tag, boolean enableLog) {
		setTag(tag);
		setEnableLog(enableLog);
	}

	public static void setEnableLog(boolean enableLog) {
		sEnableLog = enableLog;
	}

	public static void setTag(String tag) {
		sTag = tag;
	}

	public static void setFormater(MsgFormater formater) {
		sFormater = formater;
	}

	public static void v(String msg) {
		if (sEnableLog)
			android.util.Log.v(sTag, buildMessage(msg));
	}

	public static void v(String prefix, String msg) {
		if (sEnableLog)
			android.util.Log.v(sTag, addPrefix(prefix, msg));
	}

	public static void v(String msg, Throwable thr) {
		if (sEnableLog)
			android.util.Log.v(sTag, buildMessage(msg), thr);
	}

	public static void d(String msg) {
		if (sEnableLog)
			android.util.Log.d(sTag, buildMessage(msg));
	}

	public static void d(String prefix, String msg) {
		if (sEnableLog)
			android.util.Log.d(sTag, addPrefix(prefix, msg));
	}

	public static void d(String msg, Throwable thr) {
		if (sEnableLog)
			android.util.Log.d(sTag, buildMessage(msg), thr);
	}

	public static void i(String msg) {
		if (sEnableLog)
			android.util.Log.i(sTag, buildMessage(msg));
	}

	public static void i(String prefix, String msg) {
		if (sEnableLog)
			android.util.Log.i(sTag, addPrefix(prefix, msg));
	}

	public static void i(String msg, Throwable thr) {
		if (sEnableLog)
			android.util.Log.i(sTag, buildMessage(msg), thr);
	}

	public static void e(String msg) {
		if (sEnableLog)
			android.util.Log.e(sTag, buildMessage(msg));
	}

	public static void e(String prefix, String msg) {
		if (sEnableLog)
			android.util.Log.e(sTag, addPrefix(prefix, msg));
	}

	public static void e(String msg, Throwable thr) {
		if (sEnableLog)
			android.util.Log.e(sTag, buildMessage(msg), thr);
	}

	public static void w(String msg) {
		if (sEnableLog)
			android.util.Log.w(sTag, buildMessage(msg));
	}

	public static void w(String prefix, String msg) {
		if (sEnableLog)
			android.util.Log.w(sTag, addPrefix(prefix, msg));
	}

	public static void w(String msg, Throwable thr) {
		if (sEnableLog)
			android.util.Log.w(sTag, buildMessage(msg), thr);
	}

	private static String buildMessage(String msg) {
		if (sFormater == null)
			return msg;
		return sFormater.buildMessage(msg);
	}

	private static String addPrefix(String prefix, String msg) {
		return "[" + prefix + "]: " + buildMessage(msg);
	}
}
